/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package bs.ventas.rn;

import bs.facturacion.modelo.ItemProductoFacturacion;
import bs.facturacion.modelo.MovimientoFacturacion;
import bs.ventas.dao.ConceptoDAO;
import bs.ventas.modelo.ItemImpuestoVenta;
import bs.ventas.modelo.ItemProductoVenta;
import bs.ventas.modelo.ItemTotalVenta;
import bs.ventas.modelo.MovimientoVenta;
import java.math.BigDecimal;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;

/**
 *
 * @author Claudio
 */
@Stateless
public class MovimientoVentaRN {
    
    @EJB private ConceptoDAO conceptoDAO;

    @TransactionAttribute(TransactionAttributeType.REQUIRED)   
    public synchronized void guardar(MovimientoVenta m) throws Exception {
        
    }
        
    public MovimientoVenta generarComprobante(MovimientoFacturacion mf){
        
        MovimientoVenta m = new MovimientoVenta();
        
        m.setComprobante(mf.getComprobanteVenta());
        m.setFormulario(mf.getFormulario());
        m.setNumeroFormulario(mf.getNumeroFormulario());
        m.setSucursal(mf.getSucursal());
        m.setImputacionCuentaCorriente(mf.getComprobanteVenta().getTipoImputacion());
        m.setObservaciones(mf.getObservaciones());
        m.setFechaMovimiento(mf.getFechaMovimiento());
        m.setFechaVencimiento(mf.getFechaMovimiento());
        m.setCliente(mf.getCliente());
        m.setClienteCuentaCorriente(mf.getClienteCuentaCorriente());
        m.setCondicionDePago(mf.getCondicionDePago());        
        m.setVendedor(mf.getVendedor());
        m.setListaDePrecio(mf.getListaDePrecio());
        m.setMonedaListaPrecio(mf.getMonedaListaPrecio());
        m.setMonedaSecundaria(mf.getMonedaSecundaria());
        m.setCotizacion(mf.getCotizacion());
        m.setProvincia(mf.getProvincia());
        m.setZona(mf.getCliente().getZona());
        m.setCondicionDeIva(mf.getCondicionDeIva());
        
        generarItemProducto(mf, m);
        generarItemImpuesto(mf, m);
        generarItemPercepcion(mf, m);
        generarItemTotal(mf,m);
        
        return m;        
    }

    private void generarItemProducto(MovimientoFacturacion mf,MovimientoVenta mv) {
        
        if(mf.getItemsProducto()==null){
            return;
        }
        
        for(ItemProductoFacturacion ipf:mf.getItemsProducto()){
            
            ItemProductoVenta ipv = new ItemProductoVenta();
            
            ipv.setNroitm(ipf.getNroitm());
            ipv.setMovimiento(mv);
            
            ipv.setProducto(ipf.getProducto());
            ipv.setDeposito(ipf.getDeposito());
            ipv.setNserie(ipf.getNserie());
            ipv.setNdespa(ipf.getNdespa());
            ipv.setEnvase(ipf.getEnvase());
            ipv.setNubica(ipf.getNserie());
            ipv.setNatrib(ipf.getNatrib());            
            ipv.setNestan(ipf.getNestan());
            ipv.setNotros(ipf.getNotros());
            
            ipv.setConcepto(ipf.getConcepto());
            ipv.setUnidadMedida(ipf.getUnidadMedida());
            ipv.setCantidad(ipf.getCantidad());
            ipv.setCotizacion(ipf.getCotizacion());
            
            ipv.setPrecio(ipf.getPrecio());
            ipv.setPrecioSecundario(ipf.getPrecioSecundario());
            
            ipv.setPorcentajeBonificacion1(ipf.getPorcentajeBonificacion1());
            ipv.setPorcentajeBonificacion2(ipf.getPorcentajeBonificacion2());
            ipv.setPorcentajeBonificacion3(ipf.getPorcentajeBonificacion3());
            ipv.setPorcentajeBonificacion4(ipf.getPorcentajeBonificacion4());
            ipv.setPorcentajeBonificacion5(ipf.getPorcentajeBonificacion5());
            ipv.setPorcentajeBonificacion6(ipf.getPorcentajeBonificacion6());
            ipv.setPorcentaTotalBonificacion(ipf.getPorcentaTotalBonificacion());
            
            ipv.setImporte(ipf.getTotalLinea());
            ipv.setImporteSecuntario(ipf.getTotalLineaSecundario());
            
            ipv.setImporteHaber(ipf.getTotalLinea());
            ipv.setImporteHaberSecundario(ipf.getTotalLineaSecundario());
            
            mv.getItemProducto().add(ipv);
                        
        }
    }

    private void generarItemImpuesto(MovimientoFacturacion mf, MovimientoVenta mv) {
        
        if(mf.getImpIva1050().compareTo(BigDecimal.ZERO)>0){

            ItemImpuestoVenta iiv1050 = new ItemImpuestoVenta();

            //IVA 10.5%
            iiv1050.setNroitm(mv.getItemImpuesto().size()+1);
            iiv1050.setMovimiento(mv);        
            iiv1050.setConcepto(conceptoDAO.getConcepto("I", "IVA002"));        
            iiv1050.setCantidad(BigDecimal.ZERO);
            iiv1050.setCotizacion(mv.getCotizacion());  

            iiv1050.setImporte(mf.getImpIva1050());
            iiv1050.setImporteSecuntario(mf.getImpGravado1050().multiply(mf.getCotizacion()));
            iiv1050.setImporteHaber(mf.getImpIva1050());
            iiv1050.setImporteHaberSecundario(mf.getImpGravado1050().multiply(mf.getCotizacion()));
            mv.getItemImpuesto().add(iiv1050);
        }        

        if(mf.getImpIva2100().compareTo(BigDecimal.ZERO)>0){
                //IVA 21%
            ItemImpuestoVenta iiv2100 = new ItemImpuestoVenta();

            iiv2100.setNroitm(mv.getItemImpuesto().size()+1);
            iiv2100.setMovimiento(mv);        
            iiv2100.setConcepto(conceptoDAO.getConcepto("I", "IVA001"));        
            iiv2100.setCantidad(BigDecimal.ZERO);
            iiv2100.setCotizacion(mv.getCotizacion());     

            iiv2100.setImporte(mf.getImpIva2100());
            iiv2100.setImporteSecuntario(mf.getImpGravado2100().multiply(mf.getCotizacion()));
            iiv2100.setImporteHaber(mf.getImpIva2100());
            iiv2100.setImporteHaberSecundario(mf.getImpGravado2100().multiply(mf.getCotizacion()));
            mv.getItemImpuesto().add(iiv2100);            
        }
        
        if(mf.getImpIva2700().compareTo(BigDecimal.ZERO)>0){
            
            //IVA 27%
            ItemImpuestoVenta iiv2700 = new ItemImpuestoVenta();

            iiv2700.setNroitm(mv.getItemImpuesto().size()+1);
            iiv2700.setMovimiento(mv);        
            iiv2700.setConcepto(conceptoDAO.getConcepto("I", "IVA003"));        
            iiv2700.setCantidad(BigDecimal.ZERO);
            iiv2700.setCotizacion(mv.getCotizacion());     

            iiv2700.setImporte(mf.getImpIva2700());
            iiv2700.setImporteSecuntario(mf.getImpGravado2700().multiply(mf.getCotizacion()));
            iiv2700.setImporteHaber(mf.getImpIva2700());
            iiv2700.setImporteHaberSecundario(mf.getImpGravado2700().multiply(mf.getCotizacion()));
            mv.getItemImpuesto().add(iiv2700);            
        }
        
    }

    private void generarItemPercepcion(MovimientoFacturacion mf,MovimientoVenta mv) {
        
    }

    private void generarItemTotal(MovimientoFacturacion mf,MovimientoVenta mv) {
        
        ItemTotalVenta itv = new ItemTotalVenta();

        //IVA 10.5%
        itv.setNroitm(mv.getItemTotal().size()+1);
        itv.setMovimiento(mv);        
        itv.setConcepto(conceptoDAO.getConcepto("T", "DVT001"));        
        itv.setCantidad(BigDecimal.ZERO);
        itv.setCotizacion(mv.getCotizacion());  
        
        itv.setImporte(mf.getImporteTotal());
        itv.setImporteSecuntario(mf.getImporteTotal().multiply(mf.getCotizacion()));
        itv.setImporteDebe(mf.getImporteTotal());
        itv.setImporteDebeSecundario(mf.getImporteTotal().multiply(mf.getCotizacion()));
        mv.getItemTotal().add(itv);
        
    }
}
